home *** CD-ROM | disk | FTP | other *** search
/ PC World Interactive 7 / PC World Interactive 7.iso / program / qbprog.EXE / SESBUL.BAS < prev    next >
BASIC Source File  |  1995-09-27  |  6KB  |  243 lines

  1. 'Ses kartìnìn adresi ve kullandìºì IRQ'yu kesinlikle bulur
  2. 'Sadece SoundBlaster ve %100 uyumlu kartlarda geçerlidir
  3.  
  4. 'QBASIC'de çalìƒìr
  5. 'QBX de çalìƒmasì için QBX /L QBX ƒeklinde
  6. 'QB de çalìƒmasì için QB /L QB ƒeklinde baƒlanmalìdìr.
  7.  
  8. DIM Sakla(26), Adres(6)
  9.  
  10. Adres(1) = &H210
  11. Adres(2) = &H220
  12. Adres(3) = &H230
  13. Adres(4) = &H240
  14. Adres(5) = &H250
  15. Adres(6) = &H260
  16.  
  17. GOSUB KesmeVektorSakla
  18. GOSUB PicSakla
  19. GOSUB YeniKesmeYap
  20. GOSUB IRQlerinHepsiAktifOlsun
  21.  
  22. COLOR 7, 1
  23. CLS
  24. FOR I = 1 TO 6
  25.     GOSUB Seskartara
  26. NEXT
  27.  
  28. GOSUB IRQlerEskiHalineGelsin
  29. GOSUB KesmeVektorleriEskiHalineGelsin
  30. IF Sbase = 0 THEN PRINT "Sistemde ses kartì yok...": END
  31. GOSUB SesYap
  32. END
  33.  
  34. SesYap:
  35. 'Gong sesi üretiliyor
  36. Port = Sbase + &HC
  37.   FOR A = 1 TO 2
  38.      FOR I = 1 TO 127
  39.           FOR Y = 1 TO 2
  40.              Deger = I
  41.              GOSUB SesVer
  42.                Deger = 255 - I
  43.                GOSUB SesVer
  44.            NEXT
  45.      NEXT
  46.  NEXT
  47. RETURN
  48.  
  49. SesVer:
  50. DO
  51.  IF INP(Port) AND 128 <> 0 THEN EXIT DO
  52. LOOP
  53. OUT Port, 16
  54. OUT Port, Deger
  55. RETURN
  56.  
  57. KesmeVektorSakla:
  58. 'ÿnterrupt (IRQ=2,3,4,5,7   INT=A,B,C,D,F) vektor adresleri saklanìyor
  59.   DEF SEG = 0
  60.   FOR I = 40 TO 63
  61.     Sakla(I - 39) = PEEK(I)
  62.   NEXT
  63. RETURN
  64.  
  65. PicSakla:
  66. 'ÿnterrupt Kontrolör (PIC) deºeri saklanìyor
  67.  Sakla(25) = INP(&H21)
  68.  Sakla(26) = INP(&HA1)
  69. RETURN
  70.  
  71. YeniKesmeYap:
  72. 'Yeni interrupt rutinleri yerleƒtiriliyor
  73.   FOR Y = 2 TO 7
  74.     IF Y <> 6 THEN
  75.       DEF SEG = &HB900
  76.       RESTORE YeniKesme
  77.       B = (Y - 2) * 20 + 11
  78.  
  79.       FOR I = B TO B + 17
  80.          READ A
  81.          POKE I, A
  82.       NEXT
  83.  
  84.       POKE B + 9, Y
  85.       DEF SEG = 0
  86.       C = 32 + Y * 4
  87.       POKE C, B
  88.       POKE C + 1, 0
  89.       POKE C + 2, 0
  90.       POKE C + 3, &HB9
  91.     END IF
  92.   NEXT
  93. RETURN
  94.  
  95. IRQlerinHepsiAktifOlsun:
  96. 'ÿnterrupt yazmacì (PIC) IRQ'larìn çalìƒmasì için ayarlanìyor
  97. 'IRQ6 Dìƒìnda bütün IRQ'lar aktifleƒtiriliyor.(yani IRQ2,3,4,5,7)
  98. FOR Y1 = 2 TO 7
  99.  IF Y1 <> 6 THEN
  100.    RESTORE IRQSerbest
  101.    REDIM Oku(44)
  102.    DEF SEG = VARSEG(Oku(0))
  103.  
  104.     FOR PicMask = 0 TO 44
  105.        READ D%
  106.        IF PicMask = 13 THEN D% = Y1
  107.        POKE VARPTR(Oku(0)) + PicMask, D%
  108.     NEXT PicMask
  109.  
  110.    CALL ABSOLUTE(VARPTR(Oku(0)))
  111.  END IF
  112. NEXT
  113. RETURN
  114.  
  115. IRQlerEskiHalineGelsin:
  116. 'ÿnterrupt yazmacìna eski IRQ deºerleri iade ediliyor
  117.   OUT &H21, Sakla(25)
  118.   OUT &HA1, Sakla(26)
  119. RETURN
  120.  
  121. KesmeVektorleriEskiHalineGelsin:
  122. 'Eski interrupt adresleri iade ediliyor
  123.   DEF SEG = 0
  124.   FOR I = 40 TO 63
  125.     POKE I, Sakla(I - 39)
  126.   NEXT
  127. RETURN
  128.  
  129. Seskartara:
  130.     GOSUB AdresleriTemizle
  131.     Taban = Adres(I)
  132.     GOSUB SesKartTetikle
  133.     GOSUB SesKartVarveyaYok
  134.     COLOR 7, 1
  135.     LOCATE I, 1
  136.     PRINT HEX$(Adres(I)); " Adresinde ";
  137.     IF Var = 0 THEN
  138.         PRINT "Ses kartì bulunamadì"
  139.     ELSE
  140.         COLOR 14, 1
  141.         PRINT "Ses kartì bulundu, ";
  142.         Sbase = Adres(I)
  143.         GOSUB IRQAktifle
  144.         GOSUB IRQOlustumu
  145.         IF IRQ = 0 THEN
  146.               PRINT "IRQ anlaƒìlamadì !!"
  147.         ELSE
  148.               PRINT "IRQ="; IRQ; " kullanìyor..."
  149.         END IF
  150.     END IF
  151. RETURN
  152.  
  153. AdresleriTemizle:
  154.   'ÿnterruptlarìn yazacaºì offsetler temizleniyor
  155.    DEF SEG = &HB900
  156.    FOR Y = 2 TO 7
  157.        POKE Y, 0
  158.    NEXT
  159. RETURN
  160.  
  161. SesKartTetikle:
  162. 'ÿlk deºerler gönderiliyor
  163.     A = INP(Taban + &HE)
  164.     OUT Taban + 6, 1
  165.     A = INP(Taban + 6)
  166.     A = INP(Taban + 6)
  167.     A = INP(Taban + 6)
  168.     OUT Taban + 6, 0
  169. RETURN
  170.  
  171. SesKartVarveyaYok:
  172. Var = 0
  173. FOR Y3 = 1 TO 10
  174.    IF INP(Taban + &HE) AND 128 <> 0 THEN
  175.       IF INP(Taban + &HA) = 170 THEN
  176.          Var = 1
  177.          EXIT FOR
  178.       END IF
  179.    END IF
  180. NEXT Y3
  181. RETURN
  182.  
  183. IRQAktifle:
  184. 'IRQ'nun aktif olmasì için port tetikleniyor
  185. FOR Z = 1 TO 10
  186.    IF INP(Taban + &HC) OR INP(Taban + &HC) <> 0 THEN
  187.      OUT Taban + &HC, &HF2
  188.    END IF
  189. NEXT
  190. RETURN
  191.  
  192. IRQOlustumu:
  193. 'ÿnterrupt offsetlerine bakìlìyor, Kesme oluƒmuƒ mu?
  194. IRQ = 0
  195. DEF SEG = &HB900
  196. FOR Y = 2 TO 7
  197.   IF PEEK(Y) <> 0 THEN IRQ = Y
  198. NEXT
  199. RETURN
  200.  
  201. 'Yeni interrupt rutini
  202. YeniKesme:
  203. DATA &H50               : 'PUSH AX
  204. DATA &H1E               : 'PUSH DS
  205. DATA &HB8, 0, &HB9      : 'MOV AX, B900
  206. DATA &H8E, &HD8         : 'MOV DS, AX
  207. DATA &H88, &H26, 2, 0   : 'MOV [0002], AH
  208. DATA &HB0, &H20         : 'MOV AL,20
  209. DATA &HE6, &H20         : 'MOV 20,AL
  210. DATA &H1F               : 'POP DS
  211. DATA &H58               : 'POP AX
  212. DATA &HCF               : 'IRET
  213.  
  214. 'ÿnterrupt Kontrol Yazmacìnìn IRQ'ya izin verme rutini
  215. IRQSerbest:
  216. DATA &H50                  : 'PUSH AX
  217. DATA &H53                  : 'PUSH BX
  218. DATA &H51                  : 'PUSH CX
  219. DATA &H1E                  : 'PUSH DS
  220. DATA &HFA                  : 'CLI
  221. DATA &HB8, 0, &HB9         : 'MOV AX,B900
  222. DATA &H8E, &HD8            : 'MOV DS,AX
  223. DATA &H31, &HC9            : 'XOR CX,CX
  224. DATA &HB1, 2               : 'MOV CL,02
  225. DATA &HBB, 1, 0            : 'MOV BX,0001
  226. DATA &HD3, &HE3            : 'SHL BX,CL
  227. DATA &HF7, &HD3            : 'NOT BX
  228. DATA &HE4, &HA1            : 'IN AL,A1
  229. DATA &HA2, 0, 0            : 'MOV [0000],AL
  230. DATA &H20, &HF8            : 'AND AL,BH
  231. DATA &HE6, &HA1            : 'OUT A1,AL
  232. DATA &HE4, &H21            : 'IN AL,21
  233. DATA &HA2, 1, 0            : 'MOV [0001],AL
  234. DATA &H20, &HD8            : 'AND AL,BL
  235. DATA &HE6, &H21            : 'OUT 21,AL
  236. DATA &HFB                  : 'STI
  237. DATA &H1F                  : 'POP DS
  238. DATA &H59                  : 'POP CX
  239. DATA &H5B                  : 'POP BX
  240. DATA &H58                  : 'POP AX
  241. DATA &HCB                  : 'RETF
  242.  
  243.